/**
 * hnjz.com Inc.
 * Copyright (c) 2004-2014 All Rights Reserved.
 */
package com.hnjz.sys.user;

import java.util.List;

import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

/**
 * 用户相关的查询
 * 
 * @author wumi
 * @version $Id: UserMapper.java, v 0.1 Jan 14, 2014 2:20:21 PM wumi Exp $
 */
public interface UserMapper {

    /**
     * 根据用户ID获取用户对象
     * 
     * @param id 主键，用户Id
     * @return 用户对象
     */
    User findById(String id);

    /**
     * 根据用户登录名获取用户对象
     * 
     * @param loginName 用户登录名
     * @return 用户对象
     */
    User findByLoginName(String loginName);

    /**
     * 插入一个用户
     * 
     * @param user 用户对象
     * @return 插入的条数
     */
    int save(User user);

    /**
     * 更新一个用户对象
     * 
     * @param user 用户对象
     * @return 更新记录的条数
     */
    int update(User user);

    /**
     * 根据用户Id更新用户密码
     * 
     * @param newPassword 密码
     * @param id 用户Id
     * @return 更新记录的条数
     */
    int updatePasswordById(@Param("newPassword")String newPassword, @Param("id")String id);
    
    /**
     * 根据Id删除用户
     * 
     * @param id  用户ID
     * @return 删除的条数
     */
    int deleteById(String id);

    /**
     * 根据用户Id更新用户密码
     * 
     * @param newPassword 密码
     * @param id 用户Id
     * @return 更新记录的条数
     */
    long selectCountByLoginName(@Param("userName") String userName, @Param("id") String id);

    /**
     * 分页查询用户列表
     * 
     * @param user 用户对象
     * @param rbs {@link RowBounds}
     * @return 用户列表
     */
    List<User> findListByPage(User user, RowBounds rbs);
    
    /**
     * 查询记录条数
     * 
     * @param user 用户对象
     * @return
     */
    long selectCountByPage(User user);
    
    /**
     * 删除用户对应的角色
     * 
     * @param id 用户ID
     * @return 删除的条数
     */
    int deleteRoleByUser(String id);
    

    /**
     * 插入一个用户
     * 
     * @param userRole 用户角色对象
     * @return 插入的条数
     */
    int saveUserRole(UserRole userRole);

}
